package com.shujia.scala

object Demo21ScalaImplicit1 {
  /**
   * 隐式转换：动态的给对象增加方法
   *
   * 1、隐式转换方法
   * 2、隐式转换变量
   * 3、隐式转换类
   *
   */
  def main(args: Array[String]): Unit = {
    // 1、隐式转换方法
    // 相同作用域范围内只能存在一个”同类型“（输入的参数类型与返回值类型一致）的隐式转换函数
    def func1(i: Int) = {
      println(i + 100)
    }

    val s10: String = "10"
    func1(10)
    //        func1(s10) // 参数类型不匹配 会报错
    func1(Integer.parseInt(s10)) // 显示转换

    implicit def stringToInt(str: String): Int = {
      Integer.parseInt(s10)
    }

    val i: Int = stringToInt(s10)
    println(i)

    func1(stringToInt(s10))
    // func1 需要Int类型的参数 s10是String类型的 如果没有隐式转换方法 直接传入会报错
    // Scala在编译的时候会自动去寻找 隐式转换方法 找一个 String => Int 的隐式转换方法 并自动进行调用
    func1(s10)

  }



}
